#Dataset original jugadores de fifa21
origi_data21 <- read_csv("players_21.csv", col_names = TRUE)
#Dataset original jugadores de fifa22
origi_data22<-read_csv("players_22.csv", col_names = TRUE)
#Dataset original jugadores de fifa15
origi_data15<-read_csv("players_15.csv", col_names = TRUE)Esta función busca las columnas necesarias del dataset original y crea uno nuevo y le agrega una columna nueva de clasificación
fun_dataNecesaria <- function(data) { # Seleccionar columnas deseadas
data <- data[, c("short_name", "player_positions", "overall", "potential",
"value_eur", "age", "club_name", "league_name", "nationality_name",
"preferred_foot", "pace", "shooting", "passing", "dribbling",
"defending", "physic")]
# Agregar columna de clasificación
data$clasificacion <- NA
for (i in 1:nrow(data)) {
if (data$overall[i] >= 80) {
data$clasificacion[i] <- "Elite"
} else if (data$overall[i] >= 60) {
data$clasificacion[i] <- "Bueno"
} else {
data$clasificacion[i] <- "Promedio"
}
}
return(data)
}names(origi_data21)#Columnas del set de datos
#Visión general del set de datos
str(origi_data21)
glimpse(origi_data21)
#Nulos set de datos players_21
any(is.na(fdata_21))#Conocimiento de valores nulos
sum(is.na(fdata_21))#Suma total de valores nulos
sapply(fdata_21, function(x) sum(is.na(x)))# Contar valores NA por columna
#Nulos set de datos players_22
any(is.na(fdata_22))#Conocimiento de valores nulos
sum(is.na(fdata_22))#Suma total de valores nulos
sapply(fdata_22, function(x) sum(is.na(x)))# Contar valores NA por columna¿Cuál es la mayor conformación de jugadores “Elite” en las 5 grandes ligas?
Esta función reune la información de las que consideramos las 5 grandes ligas Spain Primera Division,Premier League, Serie A,Bundesliga,Ligue 1
#Datos de las 5 grandes ligas/ Funcion que busca datos de las 5 grandes ligas
fun_best_league<-function(data){
result_five<-data %>%
filter(league_name %in% c("Spain Primera Division","English Premier League", "Italian Serie A","German 1. Bundesliga",
"French Ligue 1") & clasificacion == "Elite" )
return(result_five)
}# Función que crea un gráfico de barras interactivo con los resultados de los jugadores élite de cada liga
fun_grafico_jugadores_elite_plotly <- function(data_final, year) {
# Contar el número de jugadores élite por liga
data_contada <- data_final %>%
count(league_name)
# Crear el gráfico de barras interactivo
barras_plot1 <- plot_ly(
data = data_contada,
x = ~league_name,
y = ~n, # 'n' es la columna generada por count() que contiene el conteo
type = 'bar',
marker = list(color = 'rgba(31, 119, 180, 0.8)', line = list(color = 'rgba(0, 0, 0, 1.0)', width = 1.5)),
text = ~n,
textposition = 'auto',
hoverinfo = 'x+y'
) %>%
layout(
title = paste("Distribución de jugadores Elite por liga (", year, ")"),
xaxis = list(
title = "Ligas",
tickvals = c("Spain Primera Division", "English Premier League", "Italian Serie A", "German 1. Bundesliga", "French Ligue 1"),
ticktext = c("La Liga (España)", "Premier League (Inglaterra)", "Serie A (Italia)", "Bundesliga (Alemania)", "Ligue 1 (Francia)"),
tickangle = -45 # Rotar las etiquetas del eje x para mejor legibilidad
),
yaxis = list(title = "Número de Jugadores"),
plot_bgcolor = "#C1CDC1"
)
return(barras_plot1)
}# Función que crea un gráfico de barras comparativo sobre los jugadores élite por liga
fun_grafico_comparativo_barras_plotly <- function(data1, data2, year1, year2) {
# Añadir la columna de año a cada conjunto de datos
data1$year <- as.character(year1)
data2$year <- as.character(year2)
# Combinar los conjuntos de datos
union_data <- rbind(data1, data2)
# Agrupar y contar el número de jugadores élite por liga y año
data_contada <- union_data %>%
group_by(league_name, year) %>%
summarise(n = n())
# Crear el gráfico de barras interactivo
barras_plot2 <- plot_ly(
data = data_contada,
x = ~league_name,
y = ~n,
color = ~year,
type = 'bar',
text = ~paste(n),
textposition = 'outside',
hoverinfo = 'text+y'
) %>%
layout(
title = paste("Comparativa de Jugadores Elite por Liga (", year1, "vs", year2, ")"),
xaxis = list(
title = "Ligas",
tickvals = c("Spain Primera Division", "English Premier League", "Italian Serie A", "German 1. Bundesliga", "French Ligue 1"),
ticktext = c("La Liga (España)", "Premier League (Inglaterra)", "Serie A (Italia)", "Bundesliga (Alemania)", "Ligue 1 (Francia)"),
tickangle = -45 # Rotar las etiquetas del eje x para mejor legibilidad
),
yaxis = list(title = "Jugadores Elite"),
barmode = 'group', # Agrupar las barras por año
plot_bgcolor = "#C1CDC1",
bargap = 0.2, # Espacio entre las barras
bargroupgap = 0.1 # Espacio entre los grupos de barras
)
return(barras_plot2)
} Conforme al potencial actual del jugador¿Cómo evolucionaría en la siguiente temporada?
Se creo una función para crear un nuevo dataframe solo con las habilidades de cada jugador
#Función para crear un nuevo dataframe solo con las habilidades de cada jugador
fun_habilidades<- function(data){#data == al set de datos a utilizar
data<-data %>% #Creacion de dataframe con las habilidades de los jugadores
select(short_name,potential, everything()[11:16])
#Limpieza de los datos(Eliminancion de NA no se uso por no tener informacion sobre sus estadisticas)
data<-data %>%
drop_na()
return(data)
}
habilidades_15<-fun_habilidades(fdata_15)#///
habilidades_15Se creo una funcion que tiene como proposito tratar de predicir las habilidades de los jugadores para la siguiente temporada
#2.Dataframe para la prediccion de los jugadores
fun_predicion_players <- function(data) {
data<-data %>%
drop_na()
# Seleccionar las columnas específicas
data <- data %>%
select(short_name, potential, pace, shooting, passing, dribbling, defending, physic)
# Evaluar y modificar las columnas de habilidades
for (i in 1:nrow(data)) {
if (data$potential[i] >= 90) {
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] <-
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] + 1
} else if (data$potential[i] >= 70) {
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] <-
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] + 2
} else if (data$potential[i] >= 60) {
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] <-
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] - 1
} else {
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] <-
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] + 0
}
}
return(data)
}
predic_2015<-fun_predicion_players(fdata_15)
head(predic_2015)#3.Funcion que calcular la nota general de las habilidades de un jugador
fun_overall_player <- function(player, data) {
# Defenicion de pesos
pesos <- c(pace = 0.2, shooting = 0.2, passing = 0.2, dribbling = 0.2, defending = 0.1, physic = 0.1)
# Filtrar el dataframe para obtener el jugador específico
solicitud <- data %>%
filter(short_name == player)
if (nrow(solicitud) == 0) {
print("Jugador no encontrado")
}
# Calcular el overall_habilidad usando sapply
overall_habilidad <- sapply(1:nrow(solicitud), function(i) {
sum(as.numeric(solicitud[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")]) * pesos)
})
# Crear un dataframe con los resultados deseados
resultado <- data.frame( short_name = solicitud$short_name,
potential = solicitud$potential,
pace = solicitud$pace,
shooting = solicitud$shooting,
passing = solicitud$passing,
dribbling = solicitud$dribbling,
defending = solicitud$defending,
physic = solicitud$physic,
overall_habilidad = overall_habilidad )
return(resultado)
}
fun_overall_player("L. Messi", fdata_15)Se creo esta función que tiene como proposito realizar un grafico radar recibiendo 5 parametros
player = Nombre del jugador
data1 = Primer set de datos a utilizar
data2 = Segundo set de datos a utilizar
Year1 = Año del primer set de datos evaluado
Year2 = Año del segundo set de datos evaluado
# Función que crea un gráfico de radar interactivo
fun_radar_doble_interactivo <- function(player, data1, data2, year1, year2) {
# Filtrar y seleccionar las columnas específicas para el jugador
data1 <- data1 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
data2 <- data2 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
# Combinar los datos y agregar años (sin la coma adicional)
vect_data <- rbind(
cbind(data1, Year = year1),
cbind(data2, Year = year2)
)
# Crear el gráfico de radar interactivo
radar_chart <- plot_ly(
type = 'scatterpolar',
fill = 'toself'
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year1, 1:6]),
theta = names(vect_data)[1:6],
name = as.character(year1)
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year2, 1:6]),
theta = names(vect_data)[1:6],
name = as.character(year2)
) %>%
layout(
polar = list(
radialaxis = list(
visible = TRUE,
range = c(0, 100)
)
),
title = paste("Comparativa de habilidades de", player)
)
return(radar_chart)
}Se realizo una función la cual tiene como proposito recibir 7 parametros en donde el player es el nombre del jugador data1 al 3 es set de datos que queremos evaluar y year1 al 3 el año de la evaluación
# Función que crea un gráfico de radar interactivo
fun_radar_triple_interactivo <- function(player, data1, data2, data3, year1, year2, year3) {
# Filtrar y seleccionar las columnas específicas para el jugador
data1 <- data1 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
data2 <- data2 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
data3 <- data3 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
# Combinar los datos y agregar años
vect_data <- rbind(
cbind(data1, Year = year1),
cbind(data2, Year = year2),
cbind(data3, Year = year3)
)
# Crear el gráfico de radar interactivo
radar_chart <- plot_ly(
type = 'scatterpolar',
fill = 'toself'
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year1, 1:6]),
theta = names(vect_data)[1:6],
name = year1
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year2, 1:6]),
theta = names(vect_data)[1:6],
name = year2
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year3, 1:6]),
theta = names(vect_data)[1:6],
name = year3
) %>%
layout(
polar = list(
radialaxis = list(
visible = TRUE,
range = c(0, 100)
)
),
title = paste("Comparativa de habilidades de", player)
)
return(radar_chart)
}# Crear el gráfico de pastel interactivo
fun_preferred_foot_pie<-function(data1,year){
data_count1<-data1 %>%
group_by(preferred_foot) %>%
count(preferred_foot)
pastel_chart <- plot_ly(
data = data_count1,
labels = ~preferred_foot,
values = ~n,
type = 'pie',
textinfo = 'label+percent',
insidetextorientation = 'radial',
marker = list(colors = c( "#79CDCD", "#BC8F8F"))
) %>%
layout(
title = paste("Distribución pie habil año", year)
)
return(pastel_chart)
}